home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Gold Collection / Software Vault - The Gold Collection (American Databankers) (1993).ISO / cdr15 / neovgamp.zip / VGALOAD.PAS < prev    next >
Pascal/Delphi Source File  |  1993-05-17  |  5KB  |  169 lines

  1. Program VGALoad;
  2.  
  3. Uses Crt,
  4.      Graph,
  5.      Dos;
  6.  
  7. CONST  A_VGA_Driver = 9;
  8.        MaxX = 320;
  9.        MaxY = 200;
  10.  
  11. Type InBufPtr = ^BufArray;
  12.      BufArray = Array[1..65535] of Byte;
  13.  
  14. Var InFile     : File;
  15.     FileName   : String;
  16.     CH         : Char;
  17.     Width,
  18.     Height     : Word;
  19.     InBuf      : Pointer;
  20.     Vertical,
  21.     Horizon,
  22.     ArrayIndex,
  23.     MemIndex,
  24.     BlockCount,
  25.     MaxBytes,
  26.     BufSize    : Longint;
  27.     OrigMode   : Integer;
  28.     Pal        : Array[1..768] of Byte;
  29.  
  30. {************************************************************************
  31.  *                                                                      *
  32.  *   Sets video display to VGA 320x200x256 mode after first checking    *
  33.  *   to see if the monitor supports that mode.                          *
  34.  *                                                                      *
  35.  ************************************************************************}
  36.  
  37. Function SetVideoMode : Boolean;
  38.  
  39. Var Regs    : Registers;
  40.     Driver,
  41.     Mode    : Integer;
  42.  
  43. Begin
  44.  
  45.   DetectGraph(Driver, Mode);               {* Detects VGA Monitor *}
  46.  
  47.   If Driver = A_VGA_Driver Then
  48.     Begin
  49.  
  50.       Regs.AH := $00;
  51.       Regs.AL := $13;                      {* 320x200x256 VGA Mode *}
  52.       Intr($10, Regs);
  53.       SetVideoMode := TRUE;
  54.  
  55.     End
  56.   Else SetVideoMode := FALSE;
  57.  
  58. End;
  59.  
  60. {***********************************************************************
  61.  *                                                                     *
  62.  *   Sets the diplay palette to the current image palette before       *
  63.  *   displaying that image.                                            *
  64.  *                                                                     *
  65.  ***********************************************************************}
  66.  
  67. Procedure SetPalette;
  68.  
  69. Var Regs : Registers;
  70.  
  71. Begin
  72.  
  73.   Regs.AH := $10;
  74.   Regs.AL := $12;
  75.   Regs.BX := 0;                            {* Starting Color Location *}
  76.   Regs.CX := 256;                          {* Number of Colors        *}
  77.   Regs.ES := Seg(Pal);                     {* Array of RGB values for *}
  78.   Regs.DX := Ofs(Pal);                     {* each palette color      *}
  79.   Intr($10, Regs);
  80.  
  81. End;
  82.  
  83. {***********************************************************************
  84.  *                                                                     *
  85.  *   VGALoad first reads the image file from the command line and      *
  86.  *   determines if it is a valid bitmap.  It then reads and sets the   *
  87.  *   palette from the image.  The buffer is filled and written to      *
  88.  *   video memory, which starts at [$A000:0000], until the file is     *
  89.  *   empty.  The image can be repostioned on the screen by adjusting   *
  90.  *   the MemIndex value.                                               *
  91.  *                                                                     *
  92.  ***********************************************************************}
  93.  
  94. Begin
  95.  
  96.   If ParamCount = 1 Then
  97.     Begin
  98.  
  99.       FileName := ParamStr(1);
  100.       Assign(InFile,FileName);
  101.       Reset(InFile,1);
  102.  
  103.       If (IOResult = 0) Then
  104.         Begin
  105.  
  106.           OrigMode := LastMode;
  107.           BufSize := MaxAvail;           {* Get Maximum Memory for Buffer *}
  108.           If BufSize > MaxInt Then
  109.             BufSize := MaxInt;
  110.  
  111.           GetMem(InBuf, BufSize);
  112.  
  113.           If SetVideoMode Then
  114.             Begin
  115.  
  116.               BlockRead(Infile, Width, 2);         {* Read Off Width  *}
  117.               BlockRead(Infile, Height, 2);        {* Read Off Height *}
  118.  
  119.               If (Width < MaxX) and (Height < MaxY) Then
  120.                 Begin
  121.  
  122.                   BlockRead(InFile, Pal, 768);     {* Read Palette Values *}
  123.  
  124.                   SetPalette;
  125.  
  126.                   MaxBytes   := (MaxX * (Height + 1));
  127.                   BlockCount := 1;
  128.                   ArrayIndex := 1;
  129.                   MemIndex   := 0;
  130.  
  131.                   BlockRead(InFile, InBuf^, BufSize);   {* Read BitMap *}
  132.  
  133.                   For Vertical := 1 to Height do
  134.                     For Horizon := 1 to MaxX do
  135.                       Begin
  136.  
  137.                         If Horizon <= Width Then
  138.                           Begin
  139.                                 {* Place BitMap Buffer Into Video Memory *}
  140.                             Mem[$A000:MemIndex] := InBufPtr(InBuf)^[ArrayIndex];
  141.                             If ArrayIndex >= BufSize Then
  142.                               Begin
  143.  
  144.                                 BlockRead(InFile, InBuf^, BufSize);
  145.                                 ArrayIndex := 0;
  146.  
  147.                               End;
  148.                             Inc(ArrayIndex);
  149.  
  150.                           End;
  151.                         MemIndex := MemIndex + 1;
  152.  
  153.                       End;
  154.                 End;
  155.             End;
  156.  
  157.           CH := ReadKey;
  158.  
  159.           FreeMem(InBuf,BufSize);
  160.           Close(InFile);
  161.  
  162.           TextMode(OrigMode);
  163.  
  164.         End;
  165.     End;
  166.  
  167. End.
  168.  
  169.